import * as Cesium from 'cesium';

/**
 * 处理选中节点，显示瓦片地图
 * @param {Array} selectedNodes - 选中的节点数组
 * @param {Cesium.Viewer} viewer - Cesium Viewer 实例
 */
export function handleSelectedNodes(selectedNodes, viewer) {
  selectedNodes.forEach(node => {
    if (node.type === 'tile' && node.url) {
      console.log('添加图层:', node); // 调试日志
      addTileLayer(viewer, node); // 传递整个节点对象
    }
  });
}

/**
 * 加载瓦片影像图
 * @param {Cesium.Viewer} viewer - Cesium Viewer 实例
 * @param {Object} node - 节点对象，包含图层的 URL 和其他信息
 */
function addTileLayer(viewer, node) {
  // 检查图层是否已存在，使用 layerId 作为唯一标识符
  const existingLayer = viewer.imageryLayers._layers.find(layer => layer.layerId === node.id);
  if (existingLayer) {
    existingLayer.show = true;
    // 设置图层到最顶层
    viewer.imageryLayers.raiseToTop(existingLayer); // 确保图层在最上层
    console.log('已显示图层，并提升到最上层:', existingLayer); // 调试日志
    return;
  }

  // 图层不存在，创建新的图层
  const imageProvider = new Cesium.UrlTemplateImageryProvider({
    url: node.url,
    fileExtension: "jpg"
  });

  const imageryLayer = viewer.imageryLayers.addImageryProvider(imageProvider);
  imageryLayer.layerId = node.id; // 给图层添加唯一的 ID
  imageryLayer.show = true; // 默认显示图层
  viewer.imageryLayers.raiseToTop(imageryLayer); // 添加时立即提升到最顶层
  console.log('添加图层并提升到最上层:', imageryLayer); // 调试日志
}

/**
 * 处理取消选中节点，移除瓦片地图
 * @param {Array} unselectedNodes - 取消选中的节点数组
 * @param {Cesium.Viewer} viewer - Cesium Viewer 实例
 */
export function handleUnselectedNodes(unselectedNodes, viewer) {
  unselectedNodes.forEach(node => {
    if (node.type === 'tile' && node.url) {
      // 查找图层
      const layerToRemove = viewer.imageryLayers._layers.find(layer => layer.layerId === node.id);
      if (layerToRemove) {
        layerToRemove.show = false; // 隐藏图层
        console.log('隐藏图层:', layerToRemove); // 调试日志
      } else {
        console.log('未找到图层:', node.id); // 如果找不到对应的图层，打印日志
      }
    }
  });
}

/**
 * 更新图层透明度
 * @param {Object} viewer - Cesium Viewer 对象
 * @param {Object} data - 图层数据对象，包含图层的唯一标识符（id）
 * @param {number} opacity - 透明度值，范围从 0 到 100
 */
export function updateLayerOpacity(viewer, data, opacity) {
  const layer = viewer.imageryLayers._layers.find(layer => layer.layerId === data.id);
  if (layer) {
    layer.alpha = opacity / 100; // 透明度范围是 0 到 1
    console.log(`更新图层 ${data.label} 透明度: ${opacity}%`);
  }
}

